Android数据加密方案
今天是周二,新的一天,新的心情!
本片讲解了Android数据加密方案的总结。来自于简书作者为的一篇投稿。这篇文章对数据AES加密进行一个简单的了解。希望能帮助到大家。
1、混淆文件
这个比较简单,不知道如何混淆的,推荐
2、加固
APP上线之前最好做一下加固,常用的有:360加固宝,爱加密等
3、HTTPS
现在很多APP都用HTTPS作为网络传输的保证,防止中间人攻击,提高数据传输的安全性(用Retrofit的网络请求框架的,要加上HTTPS也不是什么难事,推荐 ,这里说的HTTPS是指自签的)
4、流程图
如果你没用HTTPS的话,为了确保传输安全,还需对传输的数据进行加密,这里我推荐用AES+RSA进行加密,(不知道这两种加密算法的自行百度一下,了解一下原理),我画了一张流程图:
具体过程:
是先由服务器创建RSA密钥对
RSA公钥保存在安卓的so文件里面
服务器保存RSA私钥。
安卓创建AES密钥(这个密钥也是在so文件里面),并用该AES密钥加密待传送的明文数据,
同时用接受的RSA公钥加密AES密钥,最后把用RSA公钥加密后的AES密钥同密文一起通过Internet传输发送到服务器。
当服务器收到这个被加密的AES密钥和密文后,首先调用服务器保存的RSA私钥,并用该私钥解密加密的AES密钥,得到AES密钥。
最后用该AES密钥解密密文得到明文。
5、so文件
ndk开发的so,可以存放一些重要的数据,如:密钥、私钥、API_KEy等,不过这里我建议大家使用分段存放,C层(so文件)+String文件(string.xml)+gradle文件,用的时候再拼接合并,还有如上图所示,AES的加密算法是放在C层进行实现的,这样也是最大程度保护我们数据的安全
Q:公钥传输是否有安全问题?(RSA key)
R:固定key,也就是保存在so文件中,理论上不会不安全,当然也可以动态从服务器获取,但传输不安全(前提不是https)
Q:AES key存储在哪里比较好?
R:分段存放,C层(so文件)+String文件(string.xml)+gradle文件;也可以从服务获取
以下是个人总结:
AES加密代码:
一个AES加密解密的测试用例:
SharedPreferencesDemo.java
效果
首先,在AVD我们可以看到如下界面,在两个控件上我们分别输入abc和123456。
接着,我们打开DDMS的File Explore可以看到在data->data->ni->shared_prefs下面产生了一个名字叫做MY_PREFERENCES.xml的文件,该文件就是用来存储我们刚才设置的账号和密码。 将其导出,并打开,可以看到如下内容:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="MY_ACCOUNT">abc</string><string name="MY_PASSWORD">04B75FAD36E907BE50CE3222B0052B79</string></map>
这说明我们可以成功将账号和加密后的密码保存下来了。 最后,我们点击“退出”按钮将应用程序结束掉,再重新打开。我们又再次看到我们退出前的界面,账号密码已经被重新读取出来。
接下来分享几个关于值得推荐的学习地址:
Android平台和java平台 DES加密解密互通程序及其不能互通的原因 .
Android数据库(sqlite)加密方案:
android 3des加密Could not instantiate bean class ....
Android客户端与服务器端通过DES加密认证 .
如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809 微信公众号:终端研发部
(欢迎关注学习和交流)